package com.ksd.quartz.task;

import com.ksd.common.config.PlayControlConfig;
import com.ksd.common.enums.SourceTypeEnum;
import com.ksd.common.excel.ExcelReader;
import com.ksd.common.excel.ExcelTool;
import com.ksd.common.excel.MovieExcel;
import com.ksd.common.excel.MusicExcel;
import com.ksd.common.utils.DateUtils;
import com.ksd.quartz.service.MovieExcelService;
import com.ksd.quartz.service.MusicExcelService;
import com.ksd.system.service.ISysOperLogService;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.LinkedHashSet;
import java.util.List;

//服务器本地资源文件导入任务
@Component("byoImportTask")
public class ByoImportTask {
    private static final Logger logger = org.slf4j.LoggerFactory.getLogger(SynchApkVersionTask.class);
    @Autowired
    private MovieExcelService movieExcelService;
    @Autowired
    private MusicExcelService musicExcelService;
    @Autowired
    private ISysOperLogService sysOperLogService;

    public void getMovieAndSong() throws IOException {
        //检测服务器插入的硬盘(指定位置)内的数据是否入库,如果没有入库就进行入库,如果已经入库,不再进行操作

        String byoFilePath = PlayControlConfig.getByoFilePath();
        logger.info("系统设置服务器本地资源文件录入的资源根目录:"+byoFilePath);
        sysOperLogService.insertOperlogApiSuccess("系统设置服务器本地资源文件录入的资源根目录:"+byoFilePath);
        /**
         * 检查该目录下是否有符合条件的文件存在(电影_.xlsx/歌曲_.xlsx)如果有,就读取该文件内的内容,将其对应的文件,logo图,歌词入库,
         * 核对xlsx里的电影或音乐与xlsx里对应的表格是否一致,如果一致,就直接入库,如果不一致,直接跳过
         * 电影复制到nginx指定目录下,读取完成后,将对应的xlsx文件重命名:电影_.xlsx_yyyyMMdd_bak表示该xlsx内的数据已入库,不需要再重复读取
         */
        File file = new File(byoFilePath);
        LinkedHashSet<String> movieExcelFiles = ExcelTool.findMovieExcelFiles(byoFilePath);
        LinkedHashSet<String> musicExcelFiles = ExcelTool.findMusicExcelFiles(byoFilePath);
        logger.info("查询到服务器本地资源文件可导入的Excel歌曲文件个数:"+musicExcelFiles.size());
        sysOperLogService.insertOperlogApiSuccess("查询到服务器本地资源文件可导入的Excel歌曲文件个数:"+musicExcelFiles.size());
        logger.info("查询到服务器本地资源文件可导入的Excel电影文件个数:"+movieExcelFiles.size());
        sysOperLogService.insertOperlogApiSuccess("查询到服务器本地资源文件可导入的Excel电影文件个数:"+movieExcelFiles.size());
        Integer sourceType = SourceTypeEnum.init.getCode();
        for (String excelFilePath : movieExcelFiles) {
            logger.info("服务器本地数据资源读取电影的excel文件：" + excelFilePath);
            sysOperLogService.insertOperlogApiSuccess("服务器本地数据资源读取电影的excel文件：" + excelFilePath);
            File excelFile = new File(excelFilePath);
            List<MovieExcel> movieExcels = ExcelReader.readExcelMovieFile(excelFile);
            //根据读取到的电影属性,查找对应的电影资源,校验,入库
            movieExcelService.insertReadExcelByRootPath(PlayControlConfig.getByoFilePath(),movieExcels,SourceTypeEnum.init.getDesc(),sourceType);
            System.out.println("---------------------");
            //入库完成之后,将excel文件修改名称

            // 执行重命名
            String absolutePath = excelFile.getParentFile().getAbsolutePath();
            String fileName = excelFile.getName();
            String newFilePath = absolutePath + File.separator + "已入库_"+fileName+".bak_"+ DateUtils.dateTimeNow(DateUtils.YYYYMMDDHHMMSS);
            Path newPath = Paths.get(newFilePath);
            Path originalPath = Paths.get(excelFile.getAbsolutePath());
            Files.move(originalPath, newPath);
        }

        for (String excelFilePath : musicExcelFiles) {
            File excelFile = new File(excelFilePath);
            System.out.println("服务器本地数据资源读取歌曲的excel文件：" + excelFile.getAbsolutePath());
            sysOperLogService.insertOperlogApiSuccess("服务器本地数据资源读取歌曲的excel文件：" + excelFile.getAbsolutePath());
            List<MusicExcel> musicExcels = ExcelReader.readExcelMusicFile(excelFile);
            //根据读取到的歌曲属性,查找对应的歌曲,歌词,校验,入库
            musicExcelService.insertReadExcelByRootPath(PlayControlConfig.getByoFilePath(),musicExcels,SourceTypeEnum.init.getDesc(),sourceType);
            System.out.println("---------------------");

            // 执行重命名
            String absolutePath = excelFile.getParentFile().getAbsolutePath();
            String fileName = excelFile.getName();
            String newFilePath = absolutePath + File.separator + "已入库_"+fileName+".bak_"+DateUtils.dateTimeNow(DateUtils.YYYYMMDDHHMMSS);
            Path newPath = Paths.get(newFilePath);
            Path originalPath = Paths.get(excelFile.getAbsolutePath());
            Files.move(originalPath, newPath);
        }


        logger.info("系统设置检测服务器本地资源文件导入任务完成================================================end");
        sysOperLogService.insertOperlogApiSuccess("系统设置检测服务器本地资源文件导入任务完成");
    }


}